// src/utils/request.js
import axios from 'axios';
import { ElMessage } from 'element-plus';

// 创建 axios 实例
const service = axios.create({
  baseURL: '/api', // 从环境变量读取
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=utf-8',
  },
});

function getToken() {
  // 首先尝试获取 admin 的 token
  let token =JSON.parse(sessionStorage.getItem('admin'));
  if (token) {
    console.log('获取到 admin 的 token:', token);
    return token.token;
  }

  // 如果 admin 的 token 不存在，尝试获取 consultant 的 token
  token = JSON.parse(sessionStorage.getItem('consultant'));
  if (token) {
    console.log('获取到 consultant 的 token:', token);
    return token.token;
  }

  // 如果两者都不存在，返回 null 或抛出错误
  console.log('没有找到有效的 token');
  return null;
}

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 从 sessionStorage 获取 token
    // 这里可以根据实际情况选择获取 admin 或 consultant 的 token
    let token = getToken();

    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data;
    console.log("响应",response);
    
    // 这里根据后端接口约定修改判断条件
    if (response.status >= 200 && response.status < 300) {
      return res;
    } else {
      // 处理业务错误
      ElMessage.error(res.message || '请求失败');
      return Promise.reject(new Error(res.message || 'Error'));
    }
  },
  (error) => {
    // 处理 HTTP 错误
    let message = '';
    if (error.response) {
      switch (error.response.status) {
        case 401:
          message = '请重新登录';
          // 可以在这里触发登出逻辑
          break;
        case 403:
          message = '拒绝访问';
          break;
        case 404:
          message = '请求地址错误';
          break;
        case 500:
          message = '服务器故障';
          break;
        default:
          message = '网络连接故障';
      }
    } else if (error.request) {
      message = '网络无法连接';
    } else {
      message = error.message;
    }
    ElMessage.error(message);
    return Promise.reject(error);
  }
);

// GET 请求
export function get(url, params = {}, config = {}) {
  return service({
    method: 'get',
    url,
    params,
    ...config,
  });
}

// POST 请求
export function post(url, data = {}, config = {}) {
  return service({
    method: 'post',
    url,
    data,
    ...config,
  });
}

// PUT 请求
export function put(url, data = {}, config = {}) {
  return service({
    method: 'put',
    url,
    data,
    ...config,
  });
}

// DELETE 请求
export function del(url, config = {}) {
  return service({
    method: 'delete',
    url,
    ...config,
  });
}

export default service;